const fs = require('fs')
const path = require('path')
const logger = require('../util/logger')

const {
  root,
  target,
  _author_,
  _version_,
  _right_,
} = require('./config')

const getFilesStartingWith = require('../util/getFilesStartingWith')

const getModuleRsV0 = require('./getModule/getModuleRsV0')
const getModuleGenV0 = require('./getModule/getModuleGenV0')
const getModuleNormalV1 = require('./getModule/getModuleNormalV1')

const getFunList = [
  {
    name: '通用脚本V1',
    call: getModuleNormalV1,
  },
  {
    name: '星穹铁道脚本V0',
    call: getModuleRsV0,
  },
  {
    name: '原神脚本V0',
    call: getModuleGenV0,
  },
]

const main = async () => {
  console.log('开始……')
  logger.info('开始……')
  /* 第一步：获取源文件路径 */
  console.log('第一步：获取源文件路径……')
  logger.info('第一步：获取源文件路径……')

  if (!root) {
    console.log(`未设置源文件夹，脚本退出……`)
    logger.error('未设置源文件夹，脚本退出……')
  }
  if (!target) {
    console.log(`未设置目标文件夹，脚本退出……`)
    logger.error('未设置目标文件夹，脚本退出……')
  }
  if (!root || !target) {
    process.exit(1)
  }

  if (fs.existsSync(root) && fs.lstatSync(root).isDirectory()) {
    console.log(`文件获取成功……`)
    logger.info(`文件获取成功……`)
  } else {
    console.log(`文件夹 ${root} 不存在`)
    logger.error(`文件夹 ${root} 不存在，提取失败`)
    process.exit(1)
  }

  /* 第二步：读取文件 */
  console.log('第二步：读取文件……')
  logger.info('第二步：读取文件……')
  const vendorsFile = path.join(root, getFilesStartingWith(root, 'vendors').pop())
  const imagesRoot = path.join(root, 'images')
  if (vendorsFile && fs.existsSync(imagesRoot) && fs.lstatSync(imagesRoot).isDirectory()) {
    console.log('读取文件成功……')
    logger.info('读取文件成功……')
    logger.info(`\n源文件：${vendorsFile} \n 目标：${imagesRoot} \n\n`)
  } else {
    console.log(`源文件 vendors 不存在或 images 文件夹不存在`)
    logger.error(`源文件 vendors 不存在或 images 文件夹不存在，提取失败`)
    process.exit(1)
  }

  /* 第三步：拆解模型列表 */
  console.log('第三步：拆解模型列表……')
  logger.info('第三步：拆解模型列表……')
  let result = false

  for (const fun of getFunList) {
    console.log(`正在尝试${fun.name}……`)
    result = await fun.call()
    if (result) {
      break
    }
  }

  if (!result) {
    process.exit(1)
  }

  /* 结束 */
  console.log('结束')
  logger.info('结束')
}

console.log(`欢迎使用流星模型提取脚本，当前版本：${_version_}，作者：${_author_}，提取结果版权所有：${_right_}。`)
logger.info(`欢迎使用流星模型提取脚本，当前版本：${_version_}，作者：${_author_}，提取结果版权所有：${_right_}。`)

main()
